home *** CD-ROM | disk | FTP | other *** search
- App ChangeError
- In -
- Out ChangeErr
- Type Module
- Ver 1.00g
-
- Define Module
- Name ChangeError
- Author Justin Fletcher
- Service service
- Commands
- Name ChangeError
- Help ...
- The ChangeError module ensures that the "Bad buffer size" error
- as returned by LongFiles is not returned, but instead a
- more descriptive message is given.
- End Commands
- End Module
-
- #REM OFF
- .service
- STMFD (sp)!,{r1-r5,link} ; Stack registers
- CMP r1,#6
- BEQ svc_error
- SUB r1,r1,#&40000
- CMP r1,#&C0
- BEQ svc_wimperror
- .xservice
- LDMFD (sp)!,{r1-r5,pc}^ ; Return from call with flags
-
- .svc_wimperror
- LDMFD (sp)!,{r1-r2}
- STMFD (sp)!,{r0-r1}
- MOV r0,r2
- BL chk_error
- MOV r2,r0
- LDMFD (sp)!,{r0-r1,r3-r5,pc}^
-
- .svc_error
- REM "%c04Svc_error called"
- BL chk_error
- B xservice
-
- .chk_error
- STMFD (sp)!,{r1-r5,link} ; Stack registers
- ADD r0,r0,#4
- LDR r1,[r0,#-4]
- SUB r1,r1,#&12
- CMP r1,#&400 ; is it &412 ?
- BNE $exit
- ADR r1,$`bad_buffer
- BL cmpstr
- BNE $exit
- ADREQ r0,$`new_error+4
- REM "Found"
- $exit
- SUB r0,r0,#4
- LDMFD (sp)!,{r1-r5,pc}^ ; Return from call with flags
- $`bad_buffer
- EQUZ "Bad buffer size"
- $`new_error
- EQUD 1042
- EQUZA "File open, or bad buffer size"
-
- .cmpstr
- ; > r0 = source string
- ; r1 = comparison string
- ; < EQ if same, GT if higher, LT if less than
- STMFD (sp)!,{r0-r3,link} ; Stack registers
- $loop
- LDRB r2,[r0],#1
- LDRB r3,[r1],#1
- CMP r2,#32
- MOVLT r2,#0
- CMP r3,#32
- MOVLT r3,#0
- CMP r2,r3
- BNE $exit
- CMP r2,#0
- BNE $loop
- $exit
- LDMFD (sp)!,{r0-r3,pc} ; Return from call
-
- #Post
- #Run <CODE>
-